home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / blit.arc / ADDRECT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-23  |  2.0 KB  |  70 lines

  1. /*
  2.  * name:         addrect
  3.  *
  4.  * description: add rectangle r to the obscured list of new layer lp
  5.  *              iff it is unique. (no spelling mistake)
  6.  *
  7.  * synopsis:     addrect (r, lp)
  8.  *              struct rectangle    *r;
  9.  *              struct layer    *lp;
  10.  *
  11.  * globals:      obs     (r/w)
  12.  *              endobs   (r/w)
  13.  *
  14.  * calls:        malloc  (libc)
  15.  *
  16.  * called by:    addpiece  (addpiece.c)
  17.  *              addobs     (addobs.c)
  18.  */
  19. #include "layers.h"
  20.  
  21. extern struct obscured *obs;
  22. extern struct obscured *endobs;
  23.  
  24. addrect (r, lp)
  25. struct rectangle  *r;
  26. struct layer  *lp;                     /* layer currently occupying rectangle r
  27.                                          on screen */
  28. {
  29.    struct obscured *op;
  30.    struct obscured *newop;
  31.  
  32.    char    *malloc ();
  33.  
  34.    for (op = obs; op != null; op = op -> ob_next)/* op = each element of obs */
  35.        if ((op -> ob_rect.origin.x == r -> origin.x) &&
  36.                (op -> ob_rect.origin.y == r -> origin.y))
  37.            return;                     /* not unique */
  38.  /*
  39.   * newop = new struct obscured
  40.  */
  41.    newop = (struct obscured    *) malloc ((unsigned) sizeof (struct obscured));
  42.    newop -> ob_rect.origin.x = r -> origin.x;
  43.    newop -> ob_rect.origin.y = r -> origin.x;
  44.    newop -> ob_rect.corner.x = r -> corner.x;
  45.    newop -> ob_rect.corner.y = r -> corner.y;
  46.    newop -> ob_obs = lp;
  47.    newop -> ob_bmap = null;
  48.  /*
  49.  * link newop into end of obs list
  50.  */
  51.    if (lp -> ly_endobs != null)
  52.    /*
  53.     *  thread new obscured node onto tail of obscured list
  54.     */
  55.         lp -> ly_endobs -> ob_next = newop;
  56.    else
  57.     /*
  58.      *  this is the first obscurred rectangle in layer
  59.      */
  60.      lp -> ly_obs = newop;
  61.     /*
  62.      * link new node to previous node
  63.      * set next to null (this is the last node on list)
  64.      * set layer tail pointer to new node
  65.      */
  66.      newop -> ob_prev = lp -> ly_endobs;
  67.      newop -> ob_next = null;
  68.      lp -> ly_endobs = newop;
  69. }
  70.